স্প্রিং ORM-এর মাধ্যমে Hibernate ব্যবহার করে ডেটাবেসে Inheritance Mapping করা যায়। Hibernate ইনহেরিটেন্সের জন্য তিনটি প্রধান স্ট্র্যাটেজি সরবরাহ করে:
প্রতিটি স্ট্র্যাটেজি একটি নির্দিষ্ট ডেটাবেস কাঠামোতে ডেটা সংরক্ষণের পদ্ধতি নির্দেশ করে।
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Getters and Setters
}
@Entity
@DiscriminatorValue("FullTime")
public class FullTimeEmployee extends Employee {
private double salary;
// Getters and Setters
}
@Entity
@DiscriminatorValue("PartTime")
public class PartTimeEmployee extends Employee {
private double hourlyRate;
// Getters and Setters
}
CREATE TABLE employee (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
salary DOUBLE,
hourlyRate DOUBLE,
type VARCHAR(255)
);
JOIN
সম্পর্ক থাকে।@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Getters and Setters
}
@Entity
public class FullTimeEmployee extends Employee {
private double salary;
// Getters and Setters
}
@Entity
public class PartTimeEmployee extends Employee {
private double hourlyRate;
// Getters and Setters
}
CREATE TABLE employee (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE full_time_employee (
id BIGINT PRIMARY KEY,
salary DOUBLE,
FOREIGN KEY (id) REFERENCES employee(id)
);
CREATE TABLE part_time_employee (
id BIGINT PRIMARY KEY,
hourlyRate DOUBLE,
FOREIGN KEY (id) REFERENCES employee(id)
);
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Getters and Setters
}
@Entity
public class FullTimeEmployee extends Employee {
private double salary;
// Getters and Setters
}
@Entity
public class PartTimeEmployee extends Employee {
private double hourlyRate;
// Getters and Setters
}
CREATE TABLE full_time_employee (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
salary DOUBLE
);
CREATE TABLE part_time_employee (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
hourlyRate DOUBLE
);
স্ট্র্যাটেজি | সুবিধা | অসুবিধা | ব্যবহারের ক্ষেত্র |
---|---|---|---|
Single Table Strategy | দ্রুত পারফর্মেন্স, কম জটিলতা | ডিস্ক স্পেস অপচয়, অতিরিক্ত null ভ্যালু | ছোট ইনহেরিটেন্স হায়ারার্কি |
Joined Table Strategy | ডেটা নরমালাইজড, ডিস্ক স্পেস সাশ্রয়ী | JOIN অপারেশনের কারণে ধীরগতির | বড় ও জটিল ইনহেরিটেন্স কাঠামো |
Table Per Class Strategy | টেবিল গুলো একে অপরের সাথে স্বাধীন | প্যারেন্ট ডেটার পুনরাবৃত্তি | বিশেষ ক্ষেত্রে যেখানে স্বাধীন টেবিল প্রয়োজন |
স্প্রিং ORM এবং Hibernate দিয়ে Inheritance Mapping করার জন্য তিনটি স্ট্র্যাটেজি রয়েছে: Single Table, Joined Table এবং Table Per Class। প্রতিটি স্ট্র্যাটেজি ডেটাবেস অপারেশনের নির্দিষ্ট প্রয়োজন অনুযায়ী ব্যবহার করা হয়। সঠিক স্ট্র্যাটেজি বাছাই করলে পারফর্মেন্স উন্নত হয় এবং ডেটাবেস ম্যানেজমেন্ট সহজ হয়।